home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #2 / Amiga Plus CD - 1995 - No. 2.iso / startrek / trek73 / src / cmds3.c < prev    next >
C/C++ Source or Header  |  1995-04-11  |  5KB  |  238 lines

  1. /*
  2.  * TREK73: cmds3.c
  3.  *
  4.  * User Commands
  5.  *
  6.  * jettison_engineering, detonate_engineering, phaser_status, tube_status,
  7.  * survivors, alter_power
  8.  *
  9.  * (do_jettison)
  10.  *
  11.  */
  12.  
  13. #include <ctype.h>
  14. #include <stdio.h>
  15. #include "defines.h"
  16. #include "structs.h"
  17.  
  18. extern char title[];
  19. extern char engineer[];
  20.  
  21. jettison_engineering(sp)
  22. struct ship *sp;
  23. {
  24.  
  25.     printf("   Mr. %s, jettison our engineering section!\n", engineer);
  26.     if (sp->status & S_ENG) {
  27.         printf("%s:  But Captain, it's already jettisonned.\n", engineer);
  28.         return 0;
  29.     }
  30.     do_jettison(sp);
  31.     printf("%s:  Jettisoning engineering.\n", engineer);
  32.     return 1;
  33. }
  34.  
  35. do_jettison(sp)
  36. struct ship *sp;
  37. {
  38.     extern    struct list *newitem();
  39.     register struct list *lp;
  40.     register struct torpedo *tp;
  41.  
  42.     lp = newitem(I_ENG);
  43.     tp = lp->data.tp = MKNODE(struct torpedo, *, 1);
  44.     tp->target = NULL;
  45.     tp->speed = sp->warp;
  46.     tp->newspeed = 0.0;
  47.     tp->x = sp->x;
  48.     tp->y = sp->y;
  49.     tp->course = sp->course;
  50.     tp->fuel = sp->pods;
  51.     tp->timedelay = 10 * 10;
  52.     tp->prox = 0;
  53.     tp->from = sp;
  54.     tp->id = new_slot();
  55.     sp->energy = sp->pods = 0;
  56.     sp->newwarp = .99 * (sp->warp < 0.0 ? -1.0 : 1.0);
  57.     sp->regen = 0.0;
  58.     sp->status |= S_ENG;
  59.     sp->status |= S_WARP;
  60. }
  61.  
  62. detonate_engineering(sp)
  63. struct ship *sp;
  64. {
  65.     extern    struct list head;
  66.     extern    struct list *tail;
  67.     register struct list *lp;
  68.     register struct torpedo *tp;
  69.     register int found;
  70.     char buf[10];
  71.  
  72.     found = 0;
  73.     printf("   %s, detonate engineering!\n", engineer);
  74.     if (!(sp->status & S_ENG)) {
  75.         printf("%s: But %s, it's still attached.\n",engineer,title);
  76.         printf("   Detonate anyway? ");
  77.         if ((Gets(buf) == NULL) || (buf == NULL))
  78.             return 0;
  79.         if (buf[0] != 'y')
  80.             return 0;
  81.         else 
  82.             do_jettison(sp);
  83.     }
  84.     for (lp = &head; lp != tail; lp = lp->fwd) {
  85.         if (lp->type != I_ENG)
  86.             continue;
  87.         tp = lp->data.tp;
  88.         if (tp->from != sp)
  89.             continue;
  90.         found++;
  91.         tp->timedelay = 1;
  92.         break;
  93.     }
  94.     if (found)
  95.         printf("%s:  Aye, %s.\n",engineer, title);
  96.     else
  97.         printf("%s:  Ours has already detonated.\n", engineer);
  98.     return 1;
  99. }
  100.  
  101.  
  102. phaser_status(sp)
  103. struct ship *sp;
  104. {
  105.     register int i;
  106.  
  107.     printf("Phasers\n\n");
  108.     printf("Control: ");
  109.     for (i=0; i<4; i++) {
  110.         if (sp->phasers[i].status & P_DAMAGED)
  111.             printf("\tdamaged");
  112.         else if (sp->phasers[i].target == NULL)
  113.             printf("\tmanual");
  114.         else
  115.             printf("\t%.7s", sp->phasers[i].target->name);
  116.     }
  117.     printf("\n Turned: ");
  118.     for (i=0; i<4; i++)
  119.         if (sp->phasers[i].status & P_DAMAGED)
  120.             printf("\t");
  121.         else if (sp->phasers[i].target == NULL)
  122.             printf("\t%d", sp->phasers[i].bearing);
  123.         else
  124.             printf("\tLOCKED");
  125.     printf("\n  Level: ");
  126.     for (i=0; i<4; i++) {
  127.         if (sp->phasers[i].status & P_DAMAGED)
  128.             printf("\t");
  129.         else
  130.             printf("\t%d", sp->phasers[i].load);
  131.     }
  132.     printf("\n  Drain: ");
  133.     for (i=0; i<4; i++) {
  134.         if (sp->phasers[i].status & P_DAMAGED)
  135.             printf("\t");
  136.         else
  137.             printf("\t%d", sp->phasers[i].drain);
  138.     }
  139.     printf("\n\nFiring percentage: %d\n",sp->p_percent);
  140.     return 1;
  141. }
  142.  
  143. tube_status(sp)
  144. struct ship *sp;
  145. {
  146.     register int i;
  147.  
  148.     printf("Torpedos\n\n");
  149.     printf("Control: ");
  150.     for (i=0; i<6; i++) {
  151.         if (sp->tubes[i].status & T_DAMAGED)
  152.             printf("\tdamaged");
  153.         else if (sp->tubes[i].target == NULL)
  154.             printf("\tmanual");
  155.         else
  156.             printf("\t%.7s", sp->tubes[i].target->name);
  157.     }
  158.     printf("\n Turned: ");
  159.     for (i=0; i<6; i++)
  160.         if (sp->tubes[i].status & T_DAMAGED)
  161.             printf("\t");
  162.         else if (sp->tubes[i].target == NULL)
  163.             printf("\t%d", sp->tubes[i].bearing);
  164.         else
  165.             printf("\tLOCKED");
  166.     printf("\n  Level: ");
  167.     for (i=0; i<6; i++) {
  168.         if (sp->tubes[i].status & T_DAMAGED)
  169.             printf("\t");
  170.         else
  171.             printf("\t%d", sp->tubes[i].load);
  172.     }
  173.     printf("\n\nLaunch speed: %d\n", sp->t_lspeed);
  174.     printf("  time delay: %d\n", sp->t_delay);
  175.     printf("  prox delay: %d\n", sp->t_prox);
  176.     return 1;
  177. }
  178.  
  179. survivors(sp)
  180. struct ship *sp;
  181. {
  182.     extern struct ship *shiplist[];
  183.     extern int shipnum;
  184.     struct ship *ep;
  185.     register int i;
  186.  
  187.     printf("\nSurvivors reported:\n");
  188.     for (i=0; i<=shipnum; i++) {
  189.         ep = shiplist[i];
  190.         printf("   %s -- %d\n", ep->name, ep->crew);
  191.     }
  192.     sp = sp;                /* LINT */
  193. }
  194.  
  195. alter_power()
  196. {
  197.     extern char **argp;
  198.     extern struct ship *shiplist[];
  199.     extern char captain[];
  200.     extern double atof();
  201.     register int i;
  202.     float j;
  203.     char buf1[20];
  204.  
  205.     printf("\n%s:  Regeneration rate is %5.2f.\n",engineer, shiplist[0]->regen);
  206.     for (i=0; i<4; i++) {
  207.         printf("%s:  Shield %d drain is ", captain, i + 1);
  208.         Gets(buf1);
  209.         j = (float) atof(buf1);
  210.         if (buf1[strlen(buf1) - 1] == '*') {
  211.             for (; i<4; i++)
  212.                 shiplist[0]->shields[i].attemp_drain =j;
  213.             break;
  214.         } else if ((j < 0.0) || (j > 1.0))
  215.             goto badparam;
  216.         else
  217.             shiplist[0]->shields[i].attemp_drain = j;
  218.     }                
  219.     printf("\n");
  220.     for (i=0; i<4; i++) {
  221.         printf("%s:  Phaser %d drain is ", captain, i + 1);
  222.         Gets(buf1);
  223.         j = (float) atof(buf1);
  224.         if (buf1[strlen(buf1) - 1] == '*') {
  225.             for (; i<4; i++)
  226.                 shiplist[0]->phasers[i].drain = (int) j;
  227.             break;
  228.         } else if ((j < -10.0) || (j > 10.0))
  229.             goto badparam;
  230.         else
  231.             shiplist[0]->phasers[i].drain = (int) j;
  232.     }
  233.     return 1;
  234. badparam:
  235.     printf("%s:  Bad parameters, %s.\n", engineer, title);
  236.     return 0;
  237. }
  238.